/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package bs.entidad.dao;

import bs.entidad.modelo.EntidadComercial;
import bs.entidad.modelo.TipoEntidad;
import bs.global.dao.BaseDAO;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author Claudio
 */
@Stateless
public class EntidadDAO extends BaseDAO{
    
    public EntidadComercial getEntidad(String nrocta){
        
        return getObjeto(EntidadComercial.class, nrocta);        
    }
    
    public List<EntidadComercial> getEntidadByTipo(TipoEntidad tipo, boolean mostrarDebaja){
        
        try {
            String sQuery = "SELECT e FROM EntidadComercial e "
                    + "WHERE e.tipo = :tipo "
                    + (mostrarDebaja ? " ": " AND e.auditoria.debaja = 'N' ")
                    + "ORDER BY e.nrocta ";

            Query q = em.createQuery(sQuery);
            
            q.setParameter("tipo", tipo);
            return q.getResultList();

        } catch (Exception e) {
            log.log(Level.SEVERE, "getEntidadByTipo", e.getStackTrace());
            return new ArrayList<EntidadComercial>();
        }        
    }
    
    public List<EntidadComercial> getEntidadByBusqueda(String txtBusqueda, TipoEntidad tipo, boolean mostrarDebaja, int cantMax){
        
        try {
            String sQuery = "SELECT e FROM EntidadComercial e "
                    + "WHERE e.tipo = :tipo "
                    + " AND ((e.razonSocial LIKE :razonSocial) "
                    + "  OR  (e.nombreFantasia LIKE :nombreFantasia) "
                    + "  OR  (e.nrocta LIKE :nrocta) "
                    + "  OR  (e.email LIKE :email)"
                    + "     ) "
                    + (mostrarDebaja ? " ": " AND e.auditoria.debaja = 'N' ")
                    + "ORDER BY e.nrocta ";

            Query q = em.createQuery(sQuery);
            
            q.setParameter("tipo", tipo.getValue());
            q.setParameter("razonSocial", "%"+txtBusqueda+"%");
            q.setParameter("nombreFantasia", "%"+txtBusqueda+"%");
            q.setParameter("nrocta", "%"+txtBusqueda+"%");
            q.setParameter("email", "%"+txtBusqueda+"%");  
            
            if(cantMax>0){
                q.setMaxResults(cantMax);
            }
            
            return q.getResultList();

        } catch (Exception e) {
            e.printStackTrace();
            log.log(Level.SEVERE, "getEntidadByBusqueda", e.getMessage());
            return new ArrayList<EntidadComercial>();
        }        
    }
    
    public List<EntidadComercial> getEntidadByBusqueda(Map<String, String> filtro, String txtBusqueda, TipoEntidad tipo, boolean mostrarDebaja, int cantMax){
        
        try {
            String sQuery = "SELECT e FROM EntidadComercial e "
                    + "WHERE e.tipo = :tipo "
                    + " AND ((e.razonSocial LIKE :razonSocial) "
                    + "  OR  (e.nombreFantasia LIKE :nombreFantasia ) "
                    + "  OR  (e.nrocta LIKE :nrocta ) "
                    + "  OR  (e.email LIKE :email )"
                    + "     ) "
                    + (mostrarDebaja ? " ": " AND e.auditoria.debaja = 'N' ")
                    + generarStringFiltro(filtro,"e", false)
                    + "ORDER BY e.nrocta ";

            Query q = em.createQuery(sQuery);
            
            q.setParameter("tipo", tipo.getValue());
            q.setParameter("razonSocial", "%"+txtBusqueda+"%");
            q.setParameter("nombreFantasia", "%"+txtBusqueda+"%");
            q.setParameter("nrocta", "%"+txtBusqueda+"%");
            q.setParameter("email", "%"+txtBusqueda+"%");  
            
            if(cantMax>0){
                q.setMaxResults(cantMax);
            }
            
            return q.getResultList();

        } catch (Exception e) {
            e.printStackTrace();
            log.log(Level.SEVERE, "getEntidadByBusqueda", e.getMessage());
            return new ArrayList<EntidadComercial>();
        }        
    }
    
}
